!function(global, fn) {
    if ("object" === typeof exports && "object" === typeof module) {
        module.exports = fn(global)
    } else if ("function" === typeof define && (define.amd || define.cmd)) {
        define(function() {
            return fn(global)
        })
    } else {
        fn(global, true)
    }
}(window, function(e, n) {
    function i(n, i, t) {
        e.WeixinJSBridge ? WeixinJSBridge.invoke(n, o(i), function(e) {
            c(n, e, t)
        }) : u(n, t)
    }
    function t(n, i, t) {
        e.WeixinJSBridge ? WeixinJSBridge.on(n, function(e) {
            t && t.trigger && t.trigger(e),
                c(n, e, i)
        }) : t ? u(n, t) : u(n, i)
    }
    function o(e) {
        return e = e || {},
            e.appId = C.appId,
            e.verifyAppId = C.appId,
            e.verifySignType = "sha1",
            e.verifyTimestamp = C.timestamp + "",
            e.verifyNonceStr = C.nonceStr,
            e.verifySignature = C.signature,
            e
    }
    function r(e) {
        return {
            timeStamp: e.timestamp + "",
            nonceStr: e.nonceStr,
            package: e.package,
            paySign: e.paySign,
            signType: e.signType || "SHA1"
        }
    }
    function a(e) {
        return e.postalCode = e.addressPostalCode,
            delete e.addressPostalCode,
            e.provinceName = e.proviceFirstStageName,
            delete e.proviceFirstStageName,
            e.cityName = e.addressCitySecondStageName,
            delete e.addressCitySecondStageName,
            e.countryName = e.addressCountiesThirdStageName,
            delete e.addressCountiesThirdStageName,
            e.detailInfo = e.addressDetailInfo,
            delete e.addressDetailInfo,
            e
    }
    function c(e, n, i) {
        "openEnterpriseChat" == e && (n.errCode = n.err_code),
            delete n.err_code,
            delete n.err_desc,
            delete n.err_detail;
        var t = n.errMsg;
        t || (t = n.err_msg,
            delete n.err_msg,
            t = s(e, t),
            n.errMsg = t),
            (i = i || {})._complete && (i._complete(n),
                delete i._complete),
            t = n.errMsg || "",
            C.debug && !i.isInnerInvoke && alert(JSON.stringify(n));
        var o = t.indexOf(":");
        switch (t.substring(o + 1)) {
            case "ok":
                i.success && i.success(n);
                break;
            case "cancel":
                i.cancel && i.cancel(n);
                break;
            default:
                i.fail && i.fail(n)
        }
        i.complete && i.complete(n)
    }
    function s(e, n) {
        var i = e
            , t = v[i];
        t && (i = t);
        var o = "ok";
        if (n) {
            var r = n.indexOf(":");
            "confirm" == (o = n.substring(r + 1)) && (o = "ok"),
                "failed" == o && (o = "fail"),
                -1 != o.indexOf("failed_") && (o = o.substring(7)),
                -1 != o.indexOf("fail_") && (o = o.substring(5)),
                "access denied" != (o = (o = o.replace(/_/g, " ")).toLowerCase()) && "no permission to execute" != o || (o = "permission denied"),
                "config" == i && "function not exist" == o && (o = "ok"),
                "" == o && (o = "fail")
        }
        return n = i + ":" + o
    }
    function d(e) {
        if (e) {
            for (var n = 0, i = e.length; n < i; ++n) {
                var t = e[n]
                    , o = h[t];
                o && (e[n] = o)
            }
            return e
        }
    }
    function u(e, n) {
        if (!(!C.debug || n && n.isInnerInvoke)) {
            var i = v[e];
            i && (e = i),
                n && n._complete && delete n._complete,
                console.log('"' + e + '",', n || "")
        }
    }
    function l(e) {
        if (!(k || w || C.debug || x < "6.0.2" || V.systemType < 0)) {
            var n = new Image;
            V.appId = C.appId,
                V.initTime = A.initEndTime - A.initStartTime,
                V.preVerifyTime = A.preVerifyEndTime - A.preVerifyStartTime,
                N.getNetworkType({
                    isInnerInvoke: !0,
                    success: function(e) {
                        V.networkType = e.networkType;
                        var i = "https://open.weixin.qq.com/sdk/report?v=" + V.version + "&o=" + V.isPreVerifyOk + "&s=" + V.systemType + "&c=" + V.clientVersion + "&a=" + V.appId + "&n=" + V.networkType + "&i=" + V.initTime + "&p=" + V.preVerifyTime + "&u=" + V.url;
                        n.src = i
                    }
                })
        }
    }
    function p() {
        return (new Date).getTime()
    }
    function f(n) {
        T && (e.WeixinJSBridge ? n() : S.addEventListener && S.addEventListener("WeixinJSBridgeReady", n, !1))
    }
    function m() {
        N.invoke || (N.invoke = function(n, i, t) {
            e.WeixinJSBridge && WeixinJSBridge.invoke(n, o(i), t)
        }
            ,
            N.on = function(n, i) {
                e.WeixinJSBridge && WeixinJSBridge.on(n, i)
            }
        )
    }
    function g(e) {
        if ("string" == typeof e && e.length > 0) {
            var n = e.split("?")[0]
                , i = e.split("?")[1];
            return n += ".html",
                void 0 !== i ? n + "?" + i : n
        }
    }
    if (!e.jWeixin) {
        var h = {
            config: "preVerifyJSAPI",
            onMenuShareTimeline: "menu:share:timeline",
            onMenuShareAppMessage: "menu:share:appmessage",
            onMenuShareQQ: "menu:share:qq",
            onMenuShareWeibo: "menu:share:weiboApp",
            onMenuShareQZone: "menu:share:QZone",
            previewImage: "imagePreview",
            getLocation: "geoLocation",
            openProductSpecificView: "openProductViewWithPid",
            addCard: "batchAddCard",
            openCard: "batchViewCard",
            chooseWXPay: "getBrandWCPayRequest",
            openEnterpriseRedPacket: "getRecevieBizHongBaoRequest",
            startSearchBeacons: "startMonitoringBeacons",
            stopSearchBeacons: "stopMonitoringBeacons",
            onSearchBeacons: "onBeaconsInRange",
            consumeAndShareCard: "consumedShareCard",
            openAddress: "editAddress"
        }
            , v = function() {
                var e = {};
                for (var n in h)
                    e[h[n]] = n;
                return e
            }()
            , S = e.document
            , I = S.title
            , y = navigator.userAgent.toLowerCase()
            , _ = navigator.platform.toLowerCase()
            , k = !(!_.match("mac") && !_.match("win"))
            , w = -1 != y.indexOf("wxdebugger")
            , T = -1 != y.indexOf("micromessenger")
            , M = -1 != y.indexOf("android")
            , P = -1 != y.indexOf("iphone") || -1 != y.indexOf("ipad")
            , x = function() {
                var e = y.match(/micromessenger\/(\d+\.\d+\.\d+)/) || y.match(/micromessenger\/(\d+\.\d+)/);
                return e ? e[1] : ""
            }()
            , A = {
                initStartTime: p(),
                initEndTime: 0,
                preVerifyStartTime: 0,
                preVerifyEndTime: 0
            }
            , V = {
                version: 1,
                appId: "",
                initTime: 0,
                preVerifyTime: 0,
                networkType: "",
                isPreVerifyOk: 1,
                systemType: P ? 1 : M ? 2 : -1,
                clientVersion: x,
                url: encodeURIComponent(location.href)
            }
            , C = {}
            , L = {
                _completes: []
            }
            , B = {
                state: 0,
                data: {}
            };
        f(function() {
            A.initEndTime = p()
        });
        var O = !1
            , E = []
            , N = {
                config: function(e) {
                    C = e,
                        u("config", e);
                    var n = !1 !== C.check;
                    f(function() {
                        if (n)
                            i(h.config, {
                                verifyJsApiList: d(C.jsApiList)
                            }, function() {
                                L._complete = function(e) {
                                    A.preVerifyEndTime = p(),
                                        B.state = 1,
                                        B.data = e
                                }
                                    ,
                                    L.success = function(e) {
                                        V.isPreVerifyOk = 0
                                    }
                                    ,
                                    L.fail = function(e) {
                                        L._fail ? L._fail(e) : B.state = -1
                                    }
                                    ;
                                var e = L._completes;
                                return e.push(function() {
                                    l()
                                }),
                                    L.complete = function(n) {
                                        for (var i = 0, t = e.length; i < t; ++i)
                                            e[i]();
                                        L._completes = []
                                    }
                                    ,
                                    L
                            }()),
                                A.preVerifyStartTime = p();
                        else {
                            B.state = 1;
                            for (var e = L._completes, t = 0, o = e.length; t < o; ++t)
                                e[t]();
                            L._completes = []
                        }
                    }),
                        m()
                },
                ready: function(e) {
                    0 != B.state ? e() : (L._completes.push(e),
                        !T && C.debug && e())
                },
                error: function(e) {
                    x < "6.0.2" || (-1 == B.state ? e(B.data) : L._fail = e)
                },
                checkJsApi: function(e) {
                    var n = function(e) {
                        var n = e.checkResult;
                        for (var i in n) {
                            var t = v[i];
                            t && (n[t] = n[i],
                                delete n[i])
                        }
                        return e
                    };
                    i("checkJsApi", {
                        jsApiList: d(e.jsApiList)
                    }, (e._complete = function(e) {
                        if (M) {
                            var i = e.checkResult;
                            i && (e.checkResult = JSON.parse(i))
                        }
                        e = n(e)
                    }, e))
                },
                onMenuShareTimeline: function(e) {
                    t(h.onMenuShareTimeline, {
                        complete: function() {
                            i("shareTimeline", {
                                title: e.title || I,
                                desc: e.title || I,
                                img_url: e.imgUrl || "",
                                link: e.link || location.href,
                                type: e.type || "link",
                                data_url: e.dataUrl || ""
                            }, e)
                        }
                    }, e)
                },
                onMenuShareAppMessage: function(e) {
                    t(h.onMenuShareAppMessage, {
                        complete: function(n) {
                            "favorite" === n.scene ? i("sendAppMessage", {
                                title: e.title || I,
                                desc: e.desc || "",
                                link: e.link || location.href,
                                img_url: e.imgUrl || "",
                                type: e.type || "link",
                                data_url: e.dataUrl || ""
                            }) : i("sendAppMessage", {
                                title: e.title || I,
                                desc: e.desc || "",
                                link: e.link || location.href,
                                img_url: e.imgUrl || "",
                                type: e.type || "link",
                                data_url: e.dataUrl || ""
                            }, e)
                        }
                    }, e)
                },
                onMenuShareQQ: function(e) {
                    t(h.onMenuShareQQ, {
                        complete: function() {
                            i("shareQQ", {
                                title: e.title || I,
                                desc: e.desc || "",
                                img_url: e.imgUrl || "",
                                link: e.link || location.href
                            }, e)
                        }
                    }, e)
                },
                onMenuShareWeibo: function(e) {
                    t(h.onMenuShareWeibo, {
                        complete: function() {
                            i("shareWeiboApp", {
                                title: e.title || I,
                                desc: e.desc || "",
                                img_url: e.imgUrl || "",
                                link: e.link || location.href
                            }, e)
                        }
                    }, e)
                },
                onMenuShareQZone: function(e) {
                    t(h.onMenuShareQZone, {
                        complete: function() {
                            i("shareQZone", {
                                title: e.title || I,
                                desc: e.desc || "",
                                img_url: e.imgUrl || "",
                                link: e.link || location.href
                            }, e)
                        }
                    }, e)
                },
                updateTimelineShareData: function(e) {
                    i("updateTimelineShareData", {
                        title: e.title,
                        link: e.link,
                        imgUrl: e.imgUrl
                    }, e)
                },
                updateAppMessageShareData: function(e) {
                    i("updateAppMessageShareData", {
                        title: e.title,
                        desc: e.desc,
                        link: e.link,
                        imgUrl: e.imgUrl
                    }, e)
                },
                startRecord: function(e) {
                    i("startRecord", {}, e)
                },
                stopRecord: function(e) {
                    i("stopRecord", {}, e)
                },
                onVoiceRecordEnd: function(e) {
                    t("onVoiceRecordEnd", e)
                },
                playVoice: function(e) {
                    i("playVoice", {
                        localId: e.localId
                    }, e)
                },
                pauseVoice: function(e) {
                    i("pauseVoice", {
                        localId: e.localId
                    }, e)
                },
                stopVoice: function(e) {
                    i("stopVoice", {
                        localId: e.localId
                    }, e)
                },
                onVoicePlayEnd: function(e) {
                    t("onVoicePlayEnd", e)
                },
                uploadVoice: function(e) {
                    i("uploadVoice", {
                        localId: e.localId,
                        isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1
                    }, e)
                },
                downloadVoice: function(e) {
                    i("downloadVoice", {
                        serverId: e.serverId,
                        isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1
                    }, e)
                },
                translateVoice: function(e) {
                    i("translateVoice", {
                        localId: e.localId,
                        isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1
                    }, e)
                },
                chooseImage: function(e) {
                    i("chooseImage", {
                        scene: "1|2",
                        count: e.count || 9,
                        sizeType: e.sizeType || ["original", "compressed"],
                        sourceType: e.sourceType || ["album", "camera"]
                    }, (e._complete = function(e) {
                        if (M) {
                            var n = e.localIds;
                            try {
                                n && (e.localIds = JSON.parse(n))
                            } catch (e) { }
                        }
                    }
                        ,
                        e))
                },
                getLocation: function(e) { },
                previewImage: function(e) {
                    i(h.previewImage, {
                        current: e.current,
                        urls: e.urls
                    }, e)
                },
                uploadImage: function(e) {
                    i("uploadImage", {
                        localId: e.localId,
                        isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1
                    }, e)
                },
                downloadImage: function(e) {
                    i("downloadImage", {
                        serverId: e.serverId,
                        isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1
                    }, e)
                },
                getLocalImgData: function(e) {
                    !1 === O ? (O = !0,
                        i("getLocalImgData", {
                            localId: e.localId
                        }, (e._complete = function(e) {
                            if (O = !1,
                                E.length > 0) {
                                var n = E.shift();
                                wx.getLocalImgData(n)
                            }
                        }
                            ,
                            e))) : E.push(e)
                },
                getNetworkType: function(e) {
                    var n = function(e) {
                        var n = e.errMsg;
                        e.errMsg = "getNetworkType:ok";
                        var i = e.subtype;
                        if (delete e.subtype,
                            i)
                            e.networkType = i;
                        else {
                            var t = n.indexOf(":")
                                , o = n.substring(t + 1);
                            switch (o) {
                                case "wifi":
                                case "edge":
                                case "wwan":
                                    e.networkType = o;
                                    break;
                                default:
                                    e.errMsg = "getNetworkType:fail"
                            }
                        }
                        return e
                    };
                    i("getNetworkType", {}, (e._complete = function(e) {
                        e = n(e)
                    }
                        ,
                        e))
                },
                openLocation: function(e) {
                    i("openLocation", {
                        latitude: e.latitude,
                        longitude: e.longitude,
                        name: e.name || "",
                        address: e.address || "",
                        scale: e.scale || 28,
                        infoUrl: e.infoUrl || ""
                    }, e)
                },
                getLocation: function(e) {
                    e = e || {},
                        i(h.getLocation, {
                            type: e.type || "wgs84"
                        }, (e._complete = function(e) {
                            delete e.type
                        }
                            ,
                            e))
                },
                hideOptionMenu: function(e) {
                    i("hideOptionMenu", {}, e)
                },
                showOptionMenu: function(e) {
                    i("showOptionMenu", {}, e)
                },
                closeWindow: function(e) {
                    i("closeWindow", {}, e = e || {})
                },
                hideMenuItems: function(e) {
                    i("hideMenuItems", {
                        menuList: e.menuList
                    }, e)
                },
                showMenuItems: function(e) {
                    i("showMenuItems", {
                        menuList: e.menuList
                    }, e)
                },
                hideAllNonBaseMenuItem: function(e) {
                    i("hideAllNonBaseMenuItem", {}, e)
                },
                showAllNonBaseMenuItem: function(e) {
                    i("showAllNonBaseMenuItem", {}, e)
                },
                scanQRCode: function(e) {
                    i("scanQRCode", {
                        needResult: (e = e || {}).needResult || 0,
                        scanType: e.scanType || ["qrCode", "barCode"]
                    }, (e._complete = function(e) {
                        if (P) {
                            var n = e.resultStr;
                            if (n) {
                                var i = JSON.parse(n);
                                e.resultStr = i && i.scan_code && i.scan_code.scan_result
                            }
                        }
                    }
                        ,
                        e))
                },
                openAddress: function(e) {
                    i(h.openAddress, {}, (e._complete = function(e) {
                        e = a(e)
                    }
                        ,
                        e))
                },
                openProductSpecificView: function(e) {
                    i(h.openProductSpecificView, {
                        pid: e.productId,
                        view_type: e.viewType || 0,
                        ext_info: e.extInfo
                    }, e)
                },
                addCard: function(e) {
                    for (var n = e.cardList, t = [], o = 0, r = n.length; o < r; ++o) {
                        var a = n[o]
                            , c = {
                                card_id: a.cardId,
                                card_ext: a.cardExt
                            };
                        t.push(c)
                    }
                    i(h.addCard, {
                        card_list: t
                    }, (e._complete = function(e) {
                        var n = e.card_list;
                        if (n) {
                            for (var i = 0, t = (n = JSON.parse(n)).length; i < t; ++i) {
                                var o = n[i];
                                o.cardId = o.card_id,
                                    o.cardExt = o.card_ext,
                                    o.isSuccess = !!o.is_succ,
                                    delete o.card_id,
                                    delete o.card_ext,
                                    delete o.is_succ
                            }
                            e.cardList = n,
                                delete e.card_list
                        }
                    }
                        ,
                        e))
                },
                chooseCard: function(e) {
                    i("chooseCard", {
                        app_id: C.appId,
                        location_id: e.shopId || "",
                        sign_type: e.signType || "SHA1",
                        card_id: e.cardId || "",
                        card_type: e.cardType || "",
                        card_sign: e.cardSign,
                        time_stamp: e.timestamp + "",
                        nonce_str: e.nonceStr
                    }, (e._complete = function(e) {
                        e.cardList = e.choose_card_info,
                            delete e.choose_card_info
                    }
                        ,
                        e))
                },
                openCard: function(e) {
                    for (var n = e.cardList, t = [], o = 0, r = n.length; o < r; ++o) {
                        var a = n[o]
                            , c = {
                                card_id: a.cardId,
                                code: a.code
                            };
                        t.push(c)
                    }
                    i(h.openCard, {
                        card_list: t
                    }, e)
                },
                consumeAndShareCard: function(e) {
                    i(h.consumeAndShareCard, {
                        consumedCardId: e.cardId,
                        consumedCode: e.code
                    }, e)
                },
                chooseWXPay: function(e) {
                    i(h.chooseWXPay, r(e), e)
                },
                openEnterpriseRedPacket: function(e) {
                    i(h.openEnterpriseRedPacket, r(e), e)
                },
                startSearchBeacons: function(e) {
                    i(h.startSearchBeacons, {
                        ticket: e.ticket
                    }, e)
                },
                stopSearchBeacons: function(e) {
                    i(h.stopSearchBeacons, {}, e)
                },
                onSearchBeacons: function(e) {
                    t(h.onSearchBeacons, e)
                },
                openEnterpriseChat: function(e) {
                    i("openEnterpriseChat", {
                        useridlist: e.userIds,
                        chatname: e.groupName
                    }, e)
                },
                launchMiniProgram: function(e) {
                    i("launchMiniProgram", {
                        targetAppId: e.targetAppId,
                        path: g(e.path),
                        envVersion: e.envVersion
                    }, e)
                },
                miniProgram: {
                    navigateBack: function(e) {
                        e = e || {},
                            f(function() {
                                i("invokeMiniProgramAPI", {
                                    name: "navigateBack",
                                    arg: {
                                        delta: e.delta || 1
                                    }
                                }, e)
                            })
                    },
                    navigateTo: function(e) {
                        f(function() {
                            i("invokeMiniProgramAPI", {
                                name: "navigateTo",
                                arg: {
                                    url: e.url
                                }
                            }, e)
                        })
                    },
                    redirectTo: function(e) {
                        f(function() {
                            i("invokeMiniProgramAPI", {
                                name: "redirectTo",
                                arg: {
                                    url: e.url
                                }
                            }, e)
                        })
                    },
                    switchTab: function(e) {
                        f(function() {
                            i("invokeMiniProgramAPI", {
                                name: "switchTab",
                                arg: {
                                    url: e.url
                                }
                            }, e)
                        })
                    },
                    reLaunch: function(e) {
                        f(function() {
                            i("invokeMiniProgramAPI", {
                                name: "reLaunch",
                                arg: {
                                    url: e.url
                                }
                            }, e)
                        })
                    },
                    postMessage: function(e) {
                        f(function() {
                            i("invokeMiniProgramAPI", {
                                name: "postMessage",
                                arg: e.data || {}
                            }, e)
                        })
                    },
                    getEnv: function(n) {
                        f(function() {
                            n({
                                miniprogram: "miniprogram" === e.__wxjs_environment
                            })
                        })
                    }
                }
            }
            , b = 1
            , R = {};
        return S.addEventListener("error", function(e) {
            if (!M) {
                var n = e.target
                    , i = n.tagName
                    , t = n.src;
                if (("IMG" == i || "VIDEO" == i || "AUDIO" == i || "SOURCE" == i) && -1 != t.indexOf("wxlocalresource://")) {
                    e.preventDefault(),
                        e.stopPropagation();
                    var o = n["wx-id"];
                    if (o || (o = b++ ,
                        n["wx-id"] = o),
                        R[o])
                        return;
                    R[o] = !0,
                        wx.ready(function() {
                            wx.getLocalImgData({
                                localId: t,
                                success: function(e) {
                                    n.src = e.localData
                                }
                            })
                        })
                }
            }
        }, !0),
            S.addEventListener("load", function(e) {
                if (!M) {
                    var n = e.target
                        , i = n.tagName;
                    n.src;
                    if ("IMG" == i || "VIDEO" == i || "AUDIO" == i || "SOURCE" == i) {
                        var t = n["wx-id"];
                        t && (R[t] = !1)
                    }
                }
            }, !0),
            n && (e.wx = e.jWeixin = N), N
    }
});
